<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>





    function Fn(){

    }


    Object.prototype.Ds = function (){
        console.log('我在object函数的原型上添加的方法')
    }


    let obj = new Fn();


    console.log(obj)





    // 第一步查找自己 没有 Ds()属性  从原型链  找到实例对象的原型对象   Fn.prototype 也没有找到 Ds()

    // 而   Fn.prototype 也是一个对象   可以看做 空的Object对象 new Object()   它的隐式原型 __proto__  又会去找  Object.prototype  找到 Ds()结束

    // 加入前面没找到 到此也结束了  不会一直套娃  Object.prototype  也是一个对象 它的它的隐式原型 __proto__  指向 null  原型链到此结束

    // js中的 Object 就是   function Object(){    }

    obj.Ds();




    // 总结 原型对象
/*

    每创建一个函数，该函数都会自动带有一个prototype属性。该属性是一个指针，指向一个对象，该对象称之为原型对象(后期我们可以使用这个原型对象帮助我们在js中实现继承).

        原型对象上默认有一个属性constructor,该属性也是一个指针，指向其相关联的构造函数。

通过调用构造函数产生的实例对象，都拥有一个内部属性，指向了原型对象。其实例对象能够访问原型对象上的所有属性和方法。

总结：三者的关系是，每个构造函数都有一个原型对象，原型对象上包含着一个指向构造函数的指针，而实例都包含着一个指向原型对象的内部指针。通俗的说，
实例可以通过内部指针访问到原型对象，原型对象可以通过constructor找到构造函数。
*/


    console.log(Object)

    console.log(Object.constructor)

    function A(){
        console.log('鲁大师')
    }




    console.log(A.constructor)

    //证明了所有的函数都是Function的实例.(注意是大写Function)


    console.log(A.prototype.__proto__)



    let bbb=new Function();


</script>
</body>
</html>